#ifndef _SEM_HPP_
#define _SEM_HPP_

/* 封装信号量 */
#include <iostream>
#include <semaphore.h>

class Sem{
public:
    Sem(int value)  // 参数一：初始化信号量初始值：由外部提供
    {
        sem_init( &_sem, 0, value);     // 第二个参数：0：表示不共享！
    }

    void p(){       // P 操作：信号量减少
        sem_wait(&_sem);    // 失败会被挂起
    }

    void v(){       // V 操作：信号量增加
        sem_post(&_sem);
    }

    ~Sem(){
        sem_destroy( &_sem );
    }
private:
    sem_t _sem;     // 声明信号量
};

#endif